역기하 제약 해결사
소목차
Welcome to\nMathit!
M

본 사이트는 Mathit SSG 엔진을 통해 자동 생성된 완전한 기술 문서 사이트입니다. 좌측 목차를 클릭하여 각 문서를 확인하세요.

역기하 제약 해결사

고급 엔진 / 역기하 제약 해결사

7.1 역기하 제약 해결사

일반적인 작도는 점의 좌표를 먼저 정하고 그로부터 길이와 각도를 도출하는 순방향 방식으로 이루어집니다. 그러나 실제 기출문항은 "두 변의 길이가 각각 5와 7이고 사이 각이 30도이며, 한 꼭짓점이 특정 포물선 위에 있는 삼각형"처럼 결과적인 기하 조건만 주어지는 경우가 많습니다.

이러한 문제를 손으로 연립방정식을 세워 좌표를 구하는 대신, 수치 해석 엔진에 조건을 그대로 넘겨 미지수를 역으로 찾아내게 하는 문법이 solve 블록입니다.

미지수 리터럴

Mathit에서는 값을 알 수 없는 수치나 좌표 성분에 물음표 기호 ?를 부여합니다.

점의 가로 좌표와 세로 좌표를 모두 모른다면 C = (?, ?) 형태로 선언합니다.

만약 점이 가로축 위에 있다는 사실을 알고 있다면 세로 좌표를 0으로 고정하여 B = (?, 0)과 같이 부분 미지수로 선언합니다.

스칼라 길이 값 자체를 모를 때도 len = ? 형태로 미지수를 선언할 수 있습니다.

제약 조건 기술 문법

solve 블록 내부에는 대상이 되는 점들을 미지수로 배치하고, 그 아래에 만족해야 하는 기하학적 등식들을 나열합니다. 모든 조건식에는 반드시 동등 비교 연산자인 이중 등호 ==를 사용해야 합니다.

복사
solve {
    A = (0, 0)
    B = (?, 0)
    C = (?, ?)
    
    dist(A, B) == 5
    dist(B, C) == 7
    ang(C, A, B) == 30deg
    C.y == C.x^2 - 2
}

poly: A--B--C, stroke=1.5pt

위 코드에서 점 A는 원점에 고정되어 있고, 점 B는 가로축 위의 미지점, 점 C는 평면 위의 미지점입니다.

부여된 제약 조건은 네 가지입니다.

1. 점 A와 B 사이의 거리가 5입니다.

2. 점 B와 C 사이의 거리가 7입니다.

3. 세 점이 이루는 각 CAB의 크기가 30도입니다.

4. 점 C의 세로 좌표(C.y)가 점 C의 가로 좌표(C.x)로 표현되는 이차곡선 $y = x^2 - 2$ 위에 존재합니다.

solve 블록이 실행된 직후부터 점 B와 C는 일반 좌표점과 완전히 동일하게 poly:, line:, ang: 등의 지시어에서 활용됩니다.

수렴 실패와 디버깅 요령

제약 해결사가 올바른 해를 찾지 못하고 에러를 출력할 때는 대수학적 자유도를 점검해야 합니다.

첫째, 조건 부족 상태입니다.

찾아야 하는 미지수의 개수보다 부여된 독립 방정식의 개수가 적으면 해가 무수히 많이 존재하므로 점의 위치를 특정할 수 없습니다. 미지 성분이 총 세 개라면 서로 독립적인 기하 조건식도 최소 세 개 이상 주어져야 합니다.

둘째, 모순된 제약 상태입니다.

삼각형의 세 변의 길이를 각각 2, 3, 10으로 부여하는 것처럼 기하학적으로 불가능한 조건을 주면 해가 존재하지 않아 수렴에 실패합니다.

셋째, 다중 해 문제와 초기 추정값 지정입니다.

원과 직선의 교점 조건처럼 해가 두 개 이상 존재하는 경우, 사용자가 의도하지 않은 반대편 사분면의 해로 수렴할 수 있습니다. 이때는 미지수에 근사 힌트를 부여하여 원하는 방향의 해를 선택하도록 유도합니다.

복사
C = (? near 2, ? near 3)

위와 같이 near 키워드를 함께 적어주면 원하는 위치의 해를 잡아냅니다.